package controller;

import java.util.ArrayList;

import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

import model.courtier.DAOFilm;
import model.donnee.Film;
import model.donnee.Recherche;

public class ConsultationFilmsListener extends AbstractCommand {

	private Recherche recherche = null;
	private JTextField txtActeur = null;
	private JTextField txtAnneeMax = null;
	private JTextField txtAnneeMin = null;
	private JTextField txtGenre = null;
	private JTextField txtLangue = null;
	private JTextField txtPays = null;
	private JTextField txtRealisateur = null;
	private JTextField txtTitre = null;
	private JList<String> filmList = null;
	
	private DefaultListModel<String> modelFilms = new DefaultListModel<String>();
	
	public ConsultationFilmsListener(JTextField txtActeur,
			JTextField txtAnneeMax, JTextField txtAnneeMin,
			JTextField txtGenre, JTextField txtLangue, JTextField txtPays,
			JTextField txtRealisateur, JTextField txtTitre, JList<String> filmList) {
		this.txtActeur = txtActeur;
		this.txtAnneeMax = txtAnneeMax;
		this.txtAnneeMin = txtAnneeMin;
		this.txtGenre = txtGenre;
		this.txtLangue = txtLangue;
		this.txtPays = txtPays;
		this.txtRealisateur = txtRealisateur;
		this.txtTitre = txtTitre;
		this.filmList = filmList;
	}

	public void execute() {
		this.recherche = new Recherche();
		
		// Valide si le champs n'est pas vide ou null. Ajoute le champs à l'objet recherche.
		if(this.txtActeur.getText() != null && !this.txtActeur.getText().isEmpty()){
			String[] acteurs = this.txtActeur.getText().split(";");
			
			for (int i = 0; i != acteurs.length; ++i) {
				recherche.addActeur(acteurs[i]);
			}
		}
		
		// Valide si le champs n'est pas vide ou null. Ajoute le champs à l'objet recherche.
		if(this.txtAnneeMax.getText() != null && !this.txtAnneeMax.getText().isEmpty()){
			recherche.addAnneeMax(this.txtAnneeMax.getText());
		}
		
		// Valide si le champs n'est pas vide ou null. Ajoute le champs à l'objet recherche.
		if(this.txtAnneeMin.getText() != null && !this.txtAnneeMin.getText().isEmpty()){
			recherche.addAnneeMin(this.txtAnneeMin.getText());
		}
		
		// Valide si le champs n'est pas vide ou null. Ajoute le champs à l'objet recherche.
		if(this.txtGenre.getText() != null && !this.txtGenre.getText().isEmpty()){
			String[] genre = this.txtGenre.getText().split(";");
			
			for (int i = 0; i != genre.length; ++i) {
				recherche.addGenre(genre[i]);
			}
		}
		
		// Valide si le champs n'est pas vide ou null. Ajoute le champs à l'objet recherche.
		if(this.txtLangue.getText() != null && !this.txtLangue.getText().isEmpty()){			
			String[] langue = this.txtLangue.getText().split(";");
			
			for (int i = 0; i != langue.length; ++i) {
				recherche.addLangue(langue[i]);
			}
		}
		
		// Valide si le champs n'est pas vide ou null. Ajoute le champs à l'objet recherche.
		if(this.txtPays.getText() != null && !this.txtPays.getText().isEmpty()){			
			String[] pays = this.txtPays.getText().split(";");
			
			for (int i = 0; i != pays.length; ++i) {
				recherche.addPays(pays[i]);
			}
		}
		
		// Valide si le champs n'est pas vide ou null. Ajoute le champs à l'objet recherche.
		if(this.txtRealisateur.getText() != null && !this.txtRealisateur.getText().isEmpty()){
			String[] realisateur = this.txtRealisateur.getText().split(";");
			
			for (int i = 0; i != realisateur.length; ++i) {
				recherche.addRealisateur(realisateur[i]);
			}
		}
		
		// Valide si le champs n'est pas vide ou null. Ajoute le champs à l'objet recherche.
		if(this.txtTitre.getText() != null && !this.txtTitre.getText().isEmpty()){
			String[] titre = this.txtTitre.getText().split(";");
			
			for (int i = 0; i != titre.length; ++i) {
				recherche.addTitre(titre[i]);
			}
		}
		
		// Récupère le film dépendamment de la recherche.
		ArrayList<Film> films = DAOFilm.getFilms(recherche);
		
		// Enlève les éléments du modèle pour ne pas garder des données erronées.
		modelFilms.removeAllElements();
		
		// Valide si la recherche nous a permis de trouver un film.
		if(!films.isEmpty()){
			
			// Ajoute les objets au modèle.
			for(int i = 0; i != films.size(); ++i) {
				String[] data = new String[3];
				data[0] = films.get(i).getIdfilm() + "";
				data[1] = films.get(i).getTitre();
				data[2] = films.get(i).getAnnee() + "";
	 			modelFilms.addElement(data[0] + " " + data[1] + "(" + data[2] + ")");
			}
			
			filmList.setModel(modelFilms);
		}
		else{
			JOptionPane.showMessageDialog(null, "Il n'y a aucun film qui a été trouvé!");
		}
	}
}
